package org.melanesia.sql;

import org.melanesia.converters.JavaToJavaConverter;

/**
 * Output parameter metadata.
 *
 * @author marcin.kielar
 *
 */
class OutputParameter {

    /** Parameter name. */
    private final String name;

    /** Parameter class. */
    private final Class<?> parameterClass;

    /**
     * Optional, explicitly set java to java converter. If not set, the
     * converter will be looked up in {@link org.melanesia.converters.TypeConverter}.
     */
    private final JavaToJavaConverter converter;

    /**
     * Constructs new <code>OutputParameter</code>.
     *
     * @param name
     *            parameter name
     * @param parameterClass
     *            parameter class
     */
    OutputParameter(final String name, final Class<?> parameterClass) {
        this(name, parameterClass, null);
    }

    /**
     * Constructs new <code>OutputParameter</code>.
     *
     * @param name
     *            parameter name
     * @param parameterClass
     *            parameter class
     * @param converter
     *            java to java converter
     */
    OutputParameter(final String name, final Class<?> parameterClass, final JavaToJavaConverter converter) {
        this.name = name;
        this.parameterClass = parameterClass;
        this.converter = converter;
    }

    /**
     * Returns parameter name.
     *
     * @return parameter name
     */
    final String getName() {
        return name;
    }

    /**
     * Returns parameter type.
     *
     * @return parameter type
     */
    final Class<?> getParameterClass() {
        return parameterClass;
    }

    /**
     * Returns the explicitely set converter for this parameter value.
     *
     * @return java to java converter
     */
    final JavaToJavaConverter getConverter() {
        return converter;
    }
}
